//--------------------------------------------------
// マイルストーン追加ダイアログ
//--------------------------------------------------

App.MilestoneDlgIndex = function(config){
	// スーパークラスコンストラクタ呼び出し
	App.MilestoneDlgIndex.superclass.constructor.call(this, config);
} ;

// App.ModalDialogを継承
Ext.extend(App.MilestoneDlgIndex, App.ModalDialog, {
    //=============================
    // メンバー
    //=============================
    // オーバーライドメンバー
	width          :450,                   // ダイアログ幅
	height         :250,                   // ダイアログ高さ
	container      :"dlg_mil_edit",   // コンテナエレメントのID
    auto_loading   :true,

    // 独自メンバー
    newurl         : url_for("/milestone/dlg_new"),      // データ読込URL
    editurl        : url_for("/milestone/dlg_edit"),     // データ読込URL
    createurl      : url_for("/milestone/dlg_create"),    // 新規作成URL
    updateurl      : url_for("/milestone/dlg_update"),    // 更新URL
    destroyurl      : url_for("/milestone/dlg_destroy"),    // 削除URL
    resulthtml     : null,
    
	
    /*
     * 関数名：onDocLoaded
     * 概　要：ドキュメント読込完了イベント。
     *         該当ダイアログ内のエレメントに対し、イベント設定を行う
     * 引　数：なし
     * 戻り値：なし
     */
    onDocLoaded : function(){
	    // 保存ボタンクリックイベント設定
		elm = Ext.get('dlg_mil_edit_save') ;
		elm.on('click', this.onSave, this, true) ;
        // 削除ボタンクリックイベント設定
        elm = Ext.get('dlg_mil_edit_destroy') ;
        elm.on('click', this.onDestroy, this, true) ;
	    // 閉じるボタンクリックイベント設定
		elm = Ext.get('dlg_mil_edit_close') ;
		elm.on('click', this.onClose, this, true) ;
	},
	
    /*
     * 関数名：onSave
     * 概　要：保存ボタンクリックイベント。
     *         フォームの内容をAjax経由で登録要求する。
     * 引　数：なし
     * 戻り値：なし
     */
	onSave : function(){
	    // 入力チェック
        if( !this.fncInputCheck() ) return false ;

        // 確認メッセージ表示
        var ret = confirm( app_localized_message("confirm", "save_confirm") ) ;
        if( !ret ) return false ;
            
		try{
    		var url = "";
    		if( document.getElementById('dlg_mil_edit_miles_id').value == "" ){
    		  // 新規作成処理要求
    		  url = this.createurl ;
    		}
    		else{
    		  // 更新要求
    		  url = this.updateurl ;
    		}

			// 非同期リクエスト
			var options =
			{
				url: url,
				form: 'dlg_mil_edit_form',
				success: this.onSaveSuccess ,
				failure: this.onSaveFail,
				scope: this,
				method :'POST'
			} ;
			Ext.Ajax.request(options) ;


/*
            // 非同期リクエスト
            app_loadingStart();
            var cbobj =
            {
                success: this.onSaveSuccess ,
                failure: this.onSaveFail,
                scope: this
            } ;
            YAHOO.util.Connect.setForm('dlg_mil_edit_form') ;
            YAHOO.util.Connect.asyncRequest(
                'POST',
                url,
                cbobj
            ) ;
*/
		} catch(e) {
			alert(e.message);
		}
    
        return false ;
	},

    /*
     * 関数名：onSaveSuccess
     * 概　要：保存処理成功イベント。
     *         処理成功時の後処理を行う。
     * 引　数：obj      Object      サーバーレスポンスオブジェクト
     * 戻り値：なし
     */
    onSaveSuccess : function(obj){
        var responseobj = Ext.util.JSON.decode(obj.responseText) ;

        var success = responseobj.success ;
        var message = responseobj.message ;
        if( success ){
            this.responseobj = responseobj ;
            var resultobj = responseobj.result ;
            this.resulthtml = resultobj.resulthtml ;

            this.dialog.hide();
            // コールバック関数呼び出し
            this.fncExecCallback("on_save");
        }
        else{
            alert(message) ;
        }
//        app_loadingEnd();
    },
    
    /*
     * 関数名：onSaveFail
     * 概　要：保存処理失敗イベント。
     *         処理失敗時の後処理を行う。
     * 引　数：obj      Object      サーバーレスポンスオブジェクト
     * 戻り値：なし
     */
    onSaveFail : function(obj){
        alert(obj.responseText) ;
//        app_loadingEnd();
    },
	
    /*
     * 関数名：onDestroy
     * 概　要：削除ボタンクリックイベント。
     *         フォームの内容をAjax経由で削除要求する。
     * 引　数：なし
     * 戻り値：なし
     */
    onDestroy : function(){

        // 確認メッセージ表示
        var ret = confirm( app_localized_message("confirm", "destroy_confirm") ) ;
        if( !ret ) return false ;
            
        try{
            var url = this.destroyurl ;

			// 非同期リクエスト
			var options =
			{
				url: url,
				form: 'dlg_mil_edit_form',
				success: this.onDestroySuccess ,
				failure: this.onDestroyFail,
				scope: this,
				method :'POST'
			} ;
			Ext.Ajax.request(options) ;


/*
            // 非同期リクエスト
            app_loadingStart();
            var cbobj =
            {
                success: this.onDestroySuccess ,
                failure: this.onDestroyFail,
                scope: this
            } ;
            YAHOO.util.Connect.setForm('dlg_mil_edit_form') ;
            YAHOO.util.Connect.asyncRequest(
                'POST',
                url,
                cbobj
            ) ;
*/
        } catch(e) {
            alert(e.message);
        }
    
        return false ;
    },

    /*
     * 関数名：onDestroySuccess
     * 概　要：削除処理成功イベント。
     *         処理成功時の後処理を行う。
     * 引　数：obj      Object      サーバーレスポンスオブジェクト
     * 戻り値：なし
     */
    onDestroySuccess : function(obj){
        var responseobj = Ext.util.JSON.decode(obj.responseText) ;

        var success = responseobj.success ;
        var message = responseobj.message ;
        if( success ){
            this.responseobj = responseobj ;
            var resultobj = responseobj.result ;
            this.resulthtml = resultobj.resulthtml ;

            this.dialog.hide();
            // コールバック関数呼び出し
            this.fncExecCallback("on_destroy");
        }
        else{
            alert(message) ;
        }
//        app_loadingEnd();
    },
    
    /*
     * 関数名：onDestroyFail
     * 概　要：削除処理失敗イベント。
     *         処理失敗時の後処理を行う。
     * 引　数：obj      Object      サーバーレスポンスオブジェクト
     * 戻り値：なし
     */
    onDestroyFail : function(obj){
        alert(obj.responseText) ;
//        app_loadingEnd();
    },

    /*
     * 関数名：onBeforeShow
     * 概　要：ダイアログ表示前イベント
     * 引　数：dlg                        YAHOO.ext.BasicDialog    ダイアログオブジェクト
     * 戻り値：なし
     */
    onBeforeShow : function( dlg ){
        this.fncDataLoad() ;
    },
        
    /*
     * 関数名：onClose
     * 概　要：閉じるボタンクリックイベント
     *         ダイアログを閉じる。
     * 引　数：なし
     * 戻り値：なし
     */
	onClose : function(){
	   this.dialog.hide() ;
	   // コールバック関数呼び出し
        this.fncExecCallback("on_close");
	},
	
    /*
     * 関数名：fncReset
     * 概　要：ダイアログ内容をリセットする
     * 引　数：なし
     * 戻り値：なし
     */
    fncReset: function()
    {
        if( this.dataparam['id'] == null || this.dataparam['id'] == "" ){
            Ext.get('dlg_mil_edit_destroy').dom.style.visibility = 'hidden' ;
        }
        else{
            Ext.get('dlg_mil_edit_destroy').dom.style.visibility = 'visible' ;
        }
        var form = Ext.get('dlg_mil_edit_form');
        form.dom.reset();
    },

    /*
     * 関数名：fncDataRead
     * 概　要：パラメータの内容で、データを読み込む
     * 引　数：なし
     * 戻り値：なし
     */
    fncDataLoad: function()
    {

		try{
            Ext.get('dlg_mil_edit_base_id').dom.value = this.dataparam['base_id'] ;
            Ext.get('dlg_mil_edit_miles_id').dom.value = "" ;
            Ext.get('dlg_mil_edit_comp_id').dom.value = this.dataparam['id'] ;
            Ext.get('dlg_mil_edit_comp_project_id').dom.value = this.dataparam['project_id'] ;
            Ext.get('dlg_mil_edit_comp_class_word1').dom.value = this.dataparam['class_word1'] ;
            Ext.get('dlg_mil_edit_comp_class_word2').dom.value = this.dataparam['class_word2'] ;
            Ext.get('dlg_mil_edit_comp_class_word3').dom.value = this.dataparam['class_word3'] ;
/*
            var cbobj =
            {
                success: this.onDataLoadSuccess ,
                failure: this.onDataLoadFail,
                scope: this
            } ;

*/
            var url = "";
            if(Ext.get('dlg_mil_edit_comp_id').dom.value == "" ){
              // 新規作成処理要求
              url = this.newurl ;
            }
            else{
              // 更新要求
              url = this.editurl ;
            }

			// 非同期リクエスト
			var options =
			{
				url: url,
				form: 'dlg_mil_edit_form',
				success: this.onDataLoadSuccess ,
				failure: this.onDataLoadFail,
				scope: this,
				method :'POST'
			} ;
			Ext.Ajax.request(options) ;
/*
            YAHOO.util.Connect.setForm('dlg_mil_edit_form') ;
            YAHOO.util.Connect.asyncRequest(
                'POST',
                url,
                cbobj
            ) ;
*/
		} catch(e) {
			alert(e.message);
		}
    
        return false ;
    },

    /*
     * 関数名：onDataLoadSuccess
     * 概　要：保存処理成功イベント。
     *         処理成功時の後処理を行う。
     * 引　数：obj      Object      サーバーレスポンスオブジェクト
     * 戻り値：なし
     */
    onDataLoadSuccess : function(obj){
        var responseobj = Ext.util.JSON.decode(obj.responseText) ;

        var success = responseobj.success ;
        var message = responseobj.message ;
        if( success ){

            var resultobj = responseobj.result ;
            
            var miles = resultobj.miles ;
            var projectcomp = resultobj.projectcomp ;

            for ( var colname in miles ){
                var id = 'dlg_mil_edit_miles_' + colname;
                if (Ext.getCmp(id)) {
                    Ext.getCmp(id).setValue(miles[colname]);
                } else if (Ext.get(id)) {
                    Ext.get(id).dom.value = miles[colname];
                }
            }
            for ( var colname in projectcomp ){
                var id = 'dlg_mil_edit_comp_' + colname;
                var col = Ext.getCmp(id);
                if (Ext.getCmp(id)) {
                    col.setValue(projectcomp[colname]);
                } else if (Ext.get(id)) {
                    Ext.get(id).dom.value = projectcomp[colname];
                }
            }
/*
            for ( var colname in miles ){
                setFormElementValue( 'dlg_mil_edit_form', 'dlg_mil_edit_miles['+colname+']', miles[colname] ) ;
            }
            for ( var colname in projectcomp ){
                setFormElementValue( 'dlg_mil_edit_form', 'dlg_mil_edit_comp['+colname+']', projectcomp[colname] ) ;
            }
*/
         }
         else{
            alert(message) ;
         }

//         app_loadingEnd() ;

    },
    
    /*
     * 関数名：onDataLoadFail
     * 概　要：保存処理失敗イベント。
     *         処理失敗時の後処理を行う。
     * 引　数：obj      Object      サーバーレスポンスオブジェクト
     * 戻り値：なし
     */
    onDataLoadFail : function(obj){
        alert(obj.responseText) ;
//         app_loadingEnd() ;
    },

    /*
     * 関数名：fncInputCheck
     * 概　要：入力チェックを実施する。
     * 引　数：なし
     * 戻り値：boolean      (true:チェックOK、false:チェックNG)
     */
    fncInputCheck : function(){
        var miles_id = Ext.get('dlg_mil_edit_miles_id').dom.value ;
		if (miles_id == "") {
			// マイルストーン名
	        var item_name = Ext.get('dlg_mil_edit_comp_item_name').dom.value ;
			if (item_name == '') {
				alert('マイルストーン名は必須入力です。');
				return false;
			}
		}

		// 日付
        var mils_date = Ext.get('dlg_mil_edit_miles_mils_date').dom.value ;
		if (mils_date == '') {
			alert('日付は必須入力です。');
			return false;
		}
		// 日付書式チェック
		var mils_date_valid = this.fncValidDate(mils_date);
		if (!mils_date_valid) {
			alert('日付が正しくありません。');
			return false;
		}

        return true ;
    }

});
//=============================
// 現在のページオブジェクトのdialogsメンバーに設定
//=============================
App.Page.thispage.dialogs.MilestoneDlgIndex = new App.MilestoneDlgIndex() ;